P H P   -   Personal Home Page

9.   spezielle datei-operationen

9.1  datei hochladen (upload)

Mit einem speziellen formular kann man von einem PC eine datei auf den server hochladen. Die konstruktion von formularen wird in der HTML-dokumentation erklärt, hier wird nur auf die besonderheiten des speziellen formulars eingegangen.

<form enctype="multipart/form-data" action="seite.php" method="POST">

[ <input type="hidden" name="MAX_FILE_SIZE" value="wert" /> ]

<input name="fname" type="file" />

Das form-tag benötigt das enctype-attribut mit der angabe multipart/form-data und die methode POST. Es ist ein input-tag mit dem typ file nötig; das tag muss ein name-attribut haben, der hier verwendete, frei wählbare name fname wird in der aufgerufenen seite verwendet. Wahlweise kann ein input-tag mit dem typ hidden angegeben werden. Das tag benötigt das name-attribut mit der angabe MAX_FILE_SIZE und einen numerisch wert als value-attribut. Damit wird für die hochzuladende datei eine maximale größe festgelegt. Das tag muss vor dem input-tag mit dem typ file stehen. Es wurde nicht getestet, was geschieht, wenn wenn die maximale größe überschritten ist.

In der aufrufenden seite bietet das formular die möglichkeit, eine datei für das hochladen auszuwählen. Die datei wird zunächst in eine temporäre datei des servers hochgeladen. Der aufgerufenen seite wird das zweidimensionale, assoziative feld $_FILES mit folgenden werten zur verfügung gestellt mit denen in der aufgerufenen seite das hochladen zum abschluß gebracht werden kann.

$_FILES ["fname"] ["name"]original-dateiname
$_FILES ["fname"] ["size"]dateigöße in bytes
$_FILES ["fname"] ["type"]dateityp (stimmt nur bedingt)
$_FILES ["fname"] ["tmp_name"]temporäre datei auf dem server
$_FILES ["fname"] ["error"]fehlercode (0 = ok)
Man kann diese werte nur lesen, besser gesagt, es wurde nicht getestet, was geschieht, wenn man die werte ändert.

prüfen
Es sollte zunächst geprüft werden, ob die datei als temporäre datei hochgeladen wurde, dazu gibt es zwei möglichkeiten:

if ($_FILES ["fname"] ["size"] > 0)

bessere variante

if (isset($_FILES ["fname"]) AND (!$_FILES ["fname"] ["error"]))

Nur nach erfolgreicher prüfung ist es sinnvoll, das hochladen fortzusetzen.

kopieren
Dann kann die temporäre datei an ihren endgültigen platz kopiert werden, wird dabei nur neuer-name angegeben, wird die datei in den ordner der aufgerufenen seite kopiert, es ist aber auch die angabe eines pfadnamens
(dir / neuer-name u.ä.) möglich.

copy ($_FILES ["fname"] ["tmp_name"], "neuer-name");

oder bessere varianten

move_uploaded_file ($_FILES ["fname"] ["tmp_name"], "neuer-name")

move_uploaded_file ($_FILES ["fname"] ["tmp_name"], basename($_FILES ["fname"] ["name"] )

Mit der letzten anweisung behält die hochgeladene datei ihren ursprünglichen namen. Wenn das gewünscht wird, sollte man unbedingt diese variante verwenden, weil dabei der eventuell mitgelieferte pfadnamen abgeschnitten wird. Soll die datei nicht in den ordner der aufgerufenen seite kopiert werden, muss man schreiben "dir/" . basename.

beispiel
definition des formulars

Mit dem nachstehenden formular kann man jetzt eine datei auswählen und die seite testladen.php aufrufen. Das hochladen funktioniert nur mit textdateien, außerdem wird vorsichtshalber nur so getan als ob, d.h. das hochladen wird unterdrückt

datei hochladen – maximal 10KB

datei wählen:          

Nach der auswahl einer datei wird neben dem button Durchsuchen der dateiname angezeigt. Nach dem betätigen des buttons hochladen wird die in action angegebene seite testladen.php geladen und das formular an die seite übergeben.

seite testladen.php
Die seite wertet das feld $_FILES aus, extrahiert das suffix des dateinamens und rechnet die größe der datei von bytes auf kilobytes um.


zum untermenü


    IMPRESSUM  

    KONTAKT  

    PRIVAT  

    D O K U  


  H T M L  
  C S S  
  p h p
  My S Q L  
  JAVASCRIPT